home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacGames Sampler
/
PHT MacGames Bundle.iso
/
MacSource Folder
/
Samples from the CD
/
C and C++
/
Gnuplot 3.5 for Macintosh
/
SOURCES 3.5
/
bf_test.c
next >
Wrap
C/C++ Source or Header
|
1993-11-03
|
4KB
|
164 lines
#ifndef lint
static char *RCSid = "$Id: bf_test.c%v 3.50 1993/07/09 05:35:24 woo Exp $";
#endif
/*
* Test routines for binary files
* cc bf_test.c -o bf_test binary_files.o -lm
*
* Copyright (c) 1992 Robert K. Cunningham, MIT Lincoln Laboratory
*
*/
#include <stdio.h>
#if !defined(apollo) && !defined(sequent) && !defined(u3b2) && !defined(alliant) && !defined(sun386)
#include <stdlib.h>
#else
extern char *malloc();
#endif
#include <math.h>
float *vector();
float *extend_vector();
float *retract_vector();
float **matrix();
float **extend_matrix();
float **retract_matrix();
void free_matrix();
void free_vector();
typedef struct {
float xmin, xmax;
float ymin, ymax;
} range;
#define NUM_PLOTS 2
range TheRange[] = {{-3,3,-2,2},
{-3,3,-3,3},
{-3,3,-3,3}};/* Sampling rate causes this to go from -3:6*/
/*---- Stubs to make this work without including huge libraries ----*/
void int_error(error_text,dummy)
char *error_text;
int dummy;
{
fprintf(stderr,"Fatal error..\n");
fprintf(stderr,"%s\n",error_text);
fprintf(stderr,"...now exiting to system ...\n");
exit(1);
}
char *alloc(i)
unsigned long i;
{
return(malloc(i));
}
/*---- End of stubs ----*/
float function(p,x,y)
int p;
double x,y;
{
float t;
switch (p){
case 0:
t = 1.0/(x*x+y*y+1.0);
break;
case 1:
t = sin(x*x + y*y)/(x*x + y*y);
if (t> 1.0) t = 1.0;
break;
case 2:
t = sin(x*x + y*y)/(x*x + y*y);
t *= sin(4.*(x*x + y*y))/(4.*(x*x + y*y)); /* sinc modulated sinc */
if (t> 1.0) t = 1.0;
break;
default:
fprintf(stderr, "Unknown function\n");
break;
}
return t;
}
#define ISOSAMPLES (double)5
int
main()
{
int plot;
int i,j;
float x,y;
float *rt,*ct;
float **m;
int xsize,ysize;
char buf[256];
FILE *fout;
/* Create a few standard test interfaces */
for(plot = 0; plot < NUM_PLOTS; plot++){
xsize = (TheRange[plot].xmax - TheRange[plot].xmin)*ISOSAMPLES +1;
ysize = (TheRange[plot].ymax - TheRange[plot].ymin)*ISOSAMPLES +1;
rt = vector(0,xsize-1);
ct = vector(0,ysize-1);
m = matrix(0,xsize-1,0,ysize-1);
for(y=TheRange[plot].ymin,j=0;j<ysize;j++,y+=1.0/(double)ISOSAMPLES){
ct[j] = y;
}
for(x=TheRange[plot].xmin,i=0;i<xsize;i++,x+=1.0/(double)ISOSAMPLES){
rt[i] = x;
for(y=TheRange[plot].ymin,j=0;j<ysize;j++,y+=1.0/(double)ISOSAMPLES){
m[i][j] = function(plot,x,y);
}
}
sprintf(buf,"binary%d",plot+1);
#ifdef UNIX
if(!(fout = fopen(buf,"w")))
#else
if(!(fout = fopen(buf,"wb")))
#endif
int_error("Could not open file",0);
else{
fwrite_matrix(fout,m,0,xsize-1,0,ysize-1,rt,ct);
}
free_vector(rt,0,ysize-1);
free_vector(ct,0,xsize-1);
free_matrix(m,0,xsize-1,0,ysize-1);
}
/* Show that it's ok to vary sampling rate, as long as x1<x2, y1<y2... */
xsize = (TheRange[plot].xmax - TheRange[plot].xmin)*ISOSAMPLES +1;
ysize = (TheRange[plot].ymax - TheRange[plot].ymin)*ISOSAMPLES +1;
rt = vector(0,xsize-1);
ct = vector(0,ysize-1);
m = matrix(0,xsize-1,0,ysize-1);
for(y=TheRange[plot].ymin,j=0;j<ysize;j++,y+=1.0/(double)ISOSAMPLES){
ct[j] = y>0?2*y:y;
}
for(x=TheRange[plot].xmin,i=0;i<xsize;i++,x+=1.0/(double)ISOSAMPLES){
rt[i] = x>0?2*x:x;
for(y=TheRange[plot].ymin,j=0;j<ysize;j++,y+=1.0/(double)ISOSAMPLES){
m[i][j] = function(plot,x,y);
}
}
sprintf(buf,"binary%d",plot+1);
#ifdef UNIX
if(!(fout = fopen(buf,"w")))
#else
if(!(fout = fopen(buf,"wb")))
#endif
int_error("Could not open file",0);
else{
fwrite_matrix(fout,m,0,xsize-1,0,ysize-1,rt,ct);
}
free_vector(rt,0,ysize-1);
free_vector(ct,0,xsize-1);
free_matrix(m,0,xsize-1,0,ysize-1);
return(0);
}